package ru.averta.notes.service.interceptor;

import org.hibernate.EmptyInterceptor;
import org.hibernate.type.Type;
import ru.averta.notes.domain.TagConnector;
import ru.averta.notes.other.UtilsLucene;

import java.io.Serializable;

/**
 * <code>TagLuceneInterceptor</code>
 *
 * При удалении / изменении тега посылает команду на переиндексацию сайта
 *
 * @author fedor.belov (fedor.belov@mail.ru)
 *         Date: 16.09.11 17:32
 */
public class TagLuceneInterceptor extends EmptyInterceptor {

    private UtilsLucene utilsLucene;

    public void setUtilsLucene(UtilsLucene utilsLucene) {
        this.utilsLucene = utilsLucene;
    }

    @Override
    public void onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
        reindexSite(entity);
    }

    @Override
    public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
        reindexSite(entity);
        return true;
    }

    /**
     * Если удаляется / изменяется tagConnector, помечает site на переиндексацию Lucene
     *
     * @param entity
     */
    private void reindexSite(Object entity) {
        if (entity instanceof TagConnector) {

            TagConnector tc = (TagConnector) entity;
            utilsLucene.getFullTextSession().index(tc.getBaseSubject());

        }
    }
}
